package com.liang.book.controller;

import com.liang.book.constant.Constant;
import com.liang.book.enums.ResultCodeEnum;
import com.liang.book.enums.StatusEnums;
import com.liang.book.model.*;
import com.liang.book.service.BookService;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
@Slf4j
@RequestMapping("/book")
@RestController

public class BookController {
//  BookService bookService = new BookService();
    @Autowired
    private  BookService bookService;

//    @RequestMapping("/getList")
//    public List<BookInfo> getList(){
//        List<BookInfo> bookInfos = bookService.getList();
//        return bookInfos;
//    }
    @RequestMapping("/getListPage")
    public Result<PageResult<BookInfo>> getListByPage(RequestPage requestPage, HttpSession session) {
     log.info("getListByPage 接受参数：{}",requestPage);
     //1.参数校验/检验
        //判断用户是否登录，用session获取值
//        UserInfo userInfo = (UserInfo) session.getAttribute(Constant.USER_SESSION_KEY);
//        if(userInfo == null) {
            //用户未登录
//            Result result = new Result<>();
//            result.setCode(ResultCodeEnum.NOLOGIN.getCode());
//            result.setErrMsg("用户未登录");
//            result.setData(null);
//            return result;
            PageResult<BookInfo> result = bookService.getListByPage( requestPage);
            return Result.success(result);
        }



//        Result result2 = new Result<>();
//        result2.setCode(ResultCodeEnum.SUCESS.getCode());
//        result2.setData(result);
//        return result2;

    @RequestMapping("/addBook")
    public Boolean addBook(BookInfo bookInfo) {
      log.info(" BookController.addBook 接收参数：{}",bookInfo);
        //1.参数校验
        if(!StringUtils.hasLength(bookInfo.getBookName()) ||
        !StringUtils.hasLength(bookInfo.getAuthor()) ||
          bookInfo.getCount() == null ||
          bookInfo.getPrice() == null ||
        !StringUtils.hasLength(bookInfo.getPublish())
          ) {
         log.warn("参数不正确");
            return false;
        }
        Integer result = bookService.addBook(bookInfo);
        if(result > 0) {
//            log.info("添加图书成功");
            return true;
        }
        log.error("添加图书失败");
        return false;
        //2.操作数据库
        //3.返回结果
    }

    @RequestMapping("/getBookInfo")
    public BookInfo getBookInfo(Integer bookId) {
        log.info("getBookInfo , bookId:{}",bookId);
        BookInfo bookInfo = bookService.getBookInfo(bookId);
        if(bookInfo  == null) {
            return new BookInfo();
        }
        return bookInfo;
    }

    @RequestMapping("/updateBook")
    public Boolean updateBook(BookInfo bookInfo) {
        log.info("updateBook ，bookInfo: {}",bookInfo);
       if(bookInfo.getId() == null ){
           log.warn("Id不能为空");
           return false;
       }
       if(bookInfo.getBookName() != null && "".equals(bookInfo.getBookName().trim())) {
           log.warn("图书名称不能为空");
           return false;
       }
       try {
           Integer result = bookService.updateBook(bookInfo);
           if(result > 0) {
               return true;
           }
           return false;
       }catch (Exception e) {
           log.error("updateBook error,e :{}",e);
           return false;
       }

    }
  @RequestMapping("/deleteBook")
    public Boolean deleteBook(Integer id) {
        log.info("deleteBook,id:{}" + id);
        try{
            BookInfo bookInfo = new BookInfo();
            bookInfo.setId(id);
            bookInfo.setStatus(StatusEnums.DELETED.getCode());
            Integer result = bookService.updateBook(bookInfo);
            if(result > 0) {
                return true;
            }
            return false;
        }catch (Exception e) {
            log.error("deleteBook error,e : {}",e);
            return false;
        }
  }

  @RequestMapping("/batchDelete")
    public Boolean batchDelete(@RequestParam List<Integer> ids) { //List的话，记得加@RequestParam   //如果前端传的是json 记得加@RequestBody
        log.info("batchDelete,ids:{}" ,ids);
        if(ids == null || ids.size() == 0) {
            return true;
        }
        try{
            Integer result = bookService.batchDelete(ids);
            if(result > 0) {
                return true;
            }
            return false;
        }catch (Exception e) {
            log.error("batchDelete error:", e);
            return false;
        }

  }

}
